package xml.rest;

import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.data.MediaType;
import org.restlet.representation.StringRepresentation;
import org.restlet.routing.Router;
import xml.resource.AuthentificationResource;
import xml.resource.ContactHCARDResource;
import xml.resource.ContactResource;
import xml.resource.ContactsResource;
import xml.resource.GroupeResource;
import xml.resource.GroupesResource;
import xml.resource.PromotionHREFResource;
import xml.resource.PromotionResource;
import xml.resource.PromotionsResource;

/**
 * Définition des routes (URI) avec les ressources correspondantes
 * @author Lou Ferrand
 */
public class Application extends org.restlet.Application {

    private final Router router;

    public Application(Router router) {
        this.router = router;
    }

    @Override
    public synchronized Restlet createInboundRoot() {
        router.setContext(getContext());

        // [OK] Récupère la liste des promotions d'un utilisateur
        router.attach("/users/{idUser}/promotions", PromotionsResource.class);

        // [OK] Récupère la liste des groupes d'un utilisateur
        router.attach("/users/{idUser}/groupes", GroupesResource.class);

        // [OK] Permet de récupérer une promotion distante
        router.attach("/promotions/{idPromotion}", PromotionResource.class);


        // [OK] Permet de récupérer un groupe sur le serveur local
        router.attach("/groupes/{idGroupe}", GroupeResource.class);

        //Permet de récupérer les contacts d'un groupe
        router.attach("/groupes/{idGroupe}/contacts", ContactsResource.class);

        // [OK] Information sur un contact
        router.attach("/contacts/{idContact}", ContactResource.class);

        //Permet de convertir le contact en HCARD
        router.attach("/contacts/{idContact}/hcard", ContactHCARDResource.class);

        //Permet de récupérer l'uri originale de la promotion
        router.attach("/promotions/{idPromotion}/url", PromotionHREFResource.class);

        router.attach("/user", AuthentificationResource.class);

        Restlet mainpage = new Restlet() {

            @Override
            public void handle(Request request, Response response) {
                StringBuilder stringBuilder = new StringBuilder();

                stringBuilder.append("<html>");
                stringBuilder.append("<head><title>Projet XML</title></head>");
                stringBuilder.append("<body>");
                stringBuilder.append("<h1>Notre super service web</h1>");
                stringBuilder.append("</body>");
                stringBuilder.append("</html>");

                response.setEntity(new StringRepresentation(stringBuilder.toString(), MediaType.TEXT_HTML));
            }
        };
        router.attach("/", mainpage);
        return router;
    }
}
